<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="UTF-8">
    <title>Sucha's Blog - Archive for October, 2022</title>
    <meta name="generator" content="MarkdownProjectCompositor.lua">
    <meta name="author" content="Sucha">
    <meta name="keywords" content="suchang, programming, Linux, Lua">
    <meta name="description" content="Sucha's blog">
    <link rel="shortcut icon" href="../images/ico.png">
    <link rel="stylesheet" type="text/css" href="../styles/blog.css">
    <link rel="stylesheet" type="text/css" href="../styles/prism.min.css">
    <style id="site_theme"></style>
  </head>
  <body>
    <div id="body">
      <div id="text">
	   <!-- Page published by cmark-gfm begins here --><h1>Sucha's Blog ~ Archive for October, 2022</h1>
<p><a id="p4"></a></p>
<div class="date">22年10月30日 周日 12:15</div>
<h2>达里奥“债务周期”理论</h2>
<p>不记得在微博上看了哪位博主的介绍，开始看达里奥的债务周期理论。</p>
<p>先说一下背景，这个理论是达里奥总结经济规律后得出来的经济周期模型，这个模型着眼于经济周期，但出发点是个人、国家，我个人理解这里的债务也可以理解为个人、国家的货币（现金流），跟社会生产率的关系。</p>
<h3>交易</h3>
<p>模型从最简单的开始，人们需要交换所需，因而产生交易，这里的交易是一锤子买卖，一个人的所有消费，是另外一个人的所有收入，因为大家都交易换取所需，没有剩余的现金。</p>
<p>市场上流通的现金，刚刚好够所有人交易，也就没有通货膨胀。</p>
<h3>信用</h3>
<p>信用是加上了一个时间延期的交易，借钱的人增加了负债，放钱的人增加了资产，只有当借钱的还钱了，整个交易才完成。</p>
<p>市场中的一个环节，比如某个人因为其信用，增加了负债，在市场上凭空多出来了钱，一个人的所有消费是另外一个人的所有收入，借钱这个人环节后面的人都多了这笔钱，所以市场上凭空多出来了这笔钱。</p>
<p>借钱的人因为还钱而有了信用，也更容易借到钱，成了优质借贷人，放贷人就更乐意借钱给他，等于是鼓励借钱。</p>
<h3>短债务周期</h3>
<p>有了信用，市场上可以凭空多出来钱后，跟最开始的朴素交易不一样了，市场上有了债务（信用），也就有了周期。</p>
<p>刚开始放钱的人有利可图，借钱的人借钱容易，一切都很顺利，交易市场上会凭空多出来钱。本质上来说，这些钱是未来的现金流，但是却通过信用在当前使用。这些来自未来的钱，也让整个市场更繁荣了，繁荣的市场环境下，因为可预见的未来，人们倾向于借更多的钱，市场上的钱越来越多。</p>
<p>因为短期内社会生产率没有明显的提高，这些多出来的钱，会缓慢抬高所有社会商品的价格，这就是通货膨胀。</p>
<p>社会商品的价格是所有人承担的，而因信用在流通环节多出来的钱不是社会每个人均享的，这容易造成社会问题，因为信贷的部分过热，也容易影响金融的稳定。</p>
<p>货币管理者此时会选择回收一部分货币，其手段就是提高利率，利率提高后，放钱的会发现放钱还不如储蓄，一部分钱会从市场上回流，市场上钱少了，商品价格也会慢慢回落，钱会慢慢回到更需要它的地方，因为低利率额外出现的生产、交易会减少。</p>
<p>这个其实就是经济衰退，会从过热，回到正常的情况。</p>
<p>货币管理者其实还可以降低利率，大家都不存钱了，而是选择放贷，市场上的钱多了起来，也盘活了经济。</p>
<h3>长债务周期</h3>
<p>在短债务周期中，社会生产率也在提升，短债务周期的螺旋上升，如果社会整体的还债能力，没有超过收入能力，也就是生产率还是正的话，对社会整体还是有利的，整个社会还是向着繁荣发展。</p>
<p>但是这个螺旋循环上升的情况不是一直不变的。</p>
<p>在这个螺旋循环上升的过程中，社会的债务其实一致在不断的缓慢积累，但是也总有到头。当社会的总体债务增长速度超过了其还债增长速度的时候，会发生其中一部分人无法还债的情况，一点都还不了了。</p>
<p>而整个社会因为短周期的债务已经完全结成一体，一个人的所有支出，就是另外一个人的所有收入，当有人完全不还钱时，会导致债务链条一环扣着一环，这个时候就是信用坍塌，经济萧条的情况。</p>
<p>如果当前社会面情况很差，会导致放钱的人根本不想放钱（有钱也不放，毕竟大概率还不了），而那些可能因为一点点钱就能度过眼前难关的人，在市场上借不到钱。</p>
<p>如果货币管理者这个时候选择提高利率也没有用，因为市场上是缺钱；而货币管理者降低利率也没用，有能力放贷的人也不会借钱，因为市场上需要借钱的人，还不了钱。</p>
<p>这些因为信贷产生的钱，最终影响了社会所有方面，债务增长速度超过了还债能力，导致生产率为负。</p>
<h3>去杠杆</h3>
<p>打破这个循环，在达里奥的描述中，就是去杠杆，有下面四个步骤</p>
<ul>
<li>削减支出：其实也是人为制造衰退的一个部分，这个是为了后面几个步骤顺利而先做的</li>
<li>破产重组：确实还不起所有，只还一部分，换来的就是组织、结构重组，也是削减那些不赚钱的业务，聚焦赚钱的业务</li>
<li>财富再分配：将富人的钱转移一部分给穷人，社会总体上不是没有钱，而是富人不愿意借钱，因为没有人还得起。但这里政府的处理办法是加税（这里我不大理解），但总之是将富人（行业）的钱转移到全社会</li>
<li>发行货币/制造信用：政府入市，购买资产、服务，让货币在整个社会中能够流转</li>
</ul>
<p>这几步需要徐徐缓慢成立，既要削减支出，也要发行货币、制造信用，总之就是财富重新分配，削减那些生产率提升慢、消耗资源多的行业、公司，盘活生产率提升快、社会影响面大的行业、公司，让社会的现金流，信贷重新起来。</p>
<p>--</p>
<p>短债务周期、长债务周期对我来说，还是有点难理解，慢慢来吧。</p>
<div class="category"><a href="CategoryReading.html">CategoryReading</a> / <a href="2022-10.html#p4">Permalink</a> / <a href="https://github.com/lalawue/homepage/discussions/categories/blog" target="_blank">Discussion</a></div>
<p><a id="p3"></a></p>
<div class="date">22年10月18日 周二 23:01</div>
<h2>站点支持夜间模式</h2>
<p>在 Win 10 本上玩老旧游戏，之后用 FireFox 查了一下暗黑模式插件，找到了 <a href="https://darkreader.org/">darkreader</a> 扩展，其实也支持作为 Chrome 扩展，于是试用了一下，感觉完成度很高，阔以。</p>
<p>但是更没想到的是，因为是开源软件，github 介绍页上还包含了一个 <code>darkreader.min.js</code> 可以用在网站上，使用起来也比较简单，所以，很快，半小时不到，本站就支持夜间模式了。</p>
<p>方法是点击右边的 <strong>Function</strong> 下面的 <a onclick="changeTheme()">theme ➟</a>，就可以切换日间、夜间模式了。</p>
<p>跟用 FireFox/Chrome 插件效果一样的。</p>
<div class="category"><a href="CategoryThisSite.html">CategoryThisSite</a> / <a href="2022-10.html#p3">Permalink</a> / <a href="https://github.com/lalawue/homepage/discussions/categories/blog" target="_blank">Discussion</a></div>
<p><a id="p2"></a></p>
<div class="date">22年10月15日 周六 23:17</div>
<h2>使用 Pagefind 支持静态网页站内搜索</h2>
<p>在微博上看到了人家介绍 <a href="https://pagefind.app/">Pagefind</a>，一个静态网站搜索工具，试用了一下，感觉很不错，部署也很方便。</p>
<p>这个工具的可以在每次 html 静态内容生成之后，对 html 网页进行分析，可以指定语言等，生成的是一个个独立的 zip 文件，
以及 css 和 js，全部生成在某个目录下，不需要其他的打包工具了。</p>
<p>打包的命令行比如，最后加的 <code>--serve</code> 参数可以拉起一个本地的 http 服务器，可以浏览器直接预览。</p>
<pre><code class="language-bash">$ pagefind --bundle-dir ./pagefind --source ./publish --verbose --serve
</code></pre>
<p>运行的时候，先拉起一个 html，指定一个 id 内容节点，然后运行 js 提供的类进行 UI 渲染，它会监听 input 的输入，
然后动态更新节点下面搜索到的内容。</p>
<p>比如 HTML 页面先加载依赖的资源。</p>
<pre><code class="language-js">	&lt;link href=&quot;pagefind/pagefind-ui.css&quot; rel=&quot;stylesheet&quot;&gt;
	&lt;script src=&quot;pagefind/pagefind-ui.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</code></pre>
<p>然后下面这样跑 js 就可以了。</p>
<pre><code class="language-js">&lt;div id=&quot;pagefind&quot;&gt;&lt;/div&gt;
&lt;script&gt;
   	window.addEventListener('DOMContentLoaded', (event) =&gt; {
       	new PagefindUI({
			element: &quot;#pagefind&quot;,
			showImages: false
		});
   	});
&lt;/script&gt;
</code></pre>
<p>很好操作，UI 就不放上来了，工具是 Rust 搞的，要赞一个。</p>
<div class="category"><a href="CategoryThisSite.html">CategoryThisSite</a> / <a href="2022-10.html#p2">Permalink</a> / <a href="https://github.com/lalawue/homepage/discussions/categories/blog" target="_blank">Discussion</a></div>
<p><a id="p1"></a></p>
<div class="date">22年10月05日 周三 17:47</div>
<h2>sshfs-win 配置记录</h2>
<p>文章提供了一种 Windows 通过 sshfs-win 挂载 Linux 文件系统并访问内容的方案。</p>
<h3>​​Windows 与 Linux 文件系统交互的可选方式</h3>
<p>Windows 跟 Linux 文件系统交互数据的方式有好多种，我了解到的有</p>
<ul>
<li>rsync、scp 通过命令行传递数据</li>
<li>Linux 上开 Samba 服务，Windows 通过网络邻居协议访问</li>
<li>虚拟机诸如 VMware Tools 将 Windows 目录挂载到 Linux</li>
<li>sshfs-win 将 Linux 文件系统挂载到 Windows 的一个磁盘</li>
</ul>
<h3>SSHFS 介绍</h3>
<p>SSHFS 是一个使用 SSH File Transfer Protocol （SFTP）协议访问 SSHD 服务端，将远端文件系统，挂载到本地的用户层文件系统（FUSE)。</p>
<p>而 sshfs-win 则是一个 Windows 的实现方案，最终会将 Linux 文件系统挂载到本地的一个虚拟磁盘上。</p>
<h3>sshfs-win 安装</h3>
<p>我自己的情况是 WIN 7 SP1，Linux 是 VMware 虚拟机的 Ubuntu 18.04，看项目介绍 WIN 7 及之后的都能支持。</p>
<p>（新换了 WIN10 系统，也是这个方式安装使用）</p>
<p>有 sshfs-win-manager 这个界面管理器提供方便的操作，项目 README 有提供安装流程，我这里简单翻译一下</p>
<h4>第一步</h4>
<p>安装 winfsp 项目下的 releases 页面找到的最新稳定版本，目前是 winfsp-1.10.22006.msi</p>
<p>安装 sshfs-win 项目下的 releases 页面找到最新的稳定版本，目前是 sshfs-win-3.5.20357-x64.msi，这个是 64 位的</p>
<h4>第二步</h4>
<p>安装 ssh-win-manager 项目下的 releases 页面找到的最新稳定版本，目前是 sshfs-win-manager-setup-v1.3.1.exe</p>
<p>以上两步就安装完了。</p>
<h3>sshfs-win 配置</h3>
<p>开始菜单打开 SSHFS-Win Manager 后，点击右侧的 Add Connect 来增加需要访问的 Linux 文件系统地址就好</p>
<img width="480" alt="SSHFS-Win Manager" src="https://tva1.sinaimg.cn/large/6f6cc1c0gy1h6jagqv05aj20vm0hrgm3.jpg">
<p>增加一个配置图片</p>
<img width="480" alt="Add Connection" src="https://tva1.sinaimg.cn/large/6f6cc1c0gy1h6jahu78d5j20hp0r2mxs.jpg">
<p>如果 ssh 过去的用户无权限的话，在 Windows 这边会显示</p>
<img width="480" alt="Window 侧权限访问" src="https://tva1.sinaimg.cn/large/6f6cc1c0gy1h6jajuvrauj20j909f0te.jpg">
<div class="category"><a href="CategoryLinux.html">CategoryLinux</a> / <a href="2022-10.html#p1">Permalink</a> / <a href="https://github.com/lalawue/homepage/discussions/categories/blog" target="_blank">Discussion</a></div>
<p><a id="p0"></a></p>
<div class="date">22年10月03日 周一 22:42</div>
<h2>MNet / Cincau 支持 Win 10</h2>
<p>国庆放假没想好去哪里，再加上深圳这边几乎天天都有疫情，零星爆发，特别是罗湖、福田，连宝安也有一处，就更不敢走远了。</p>
<p>然后这个国庆的前几天，是为 MNet、Cincau 加入了 Win 10 的支持，虽然说之前有做过 Win 7 的，但在那之后都只验证了 Mac 和 Linux 下的场景，毕竟我自己没怎么使用 Windows 嘛。</p>
<p>其实有这个想法也很自然，因为 9 月底的时候，把家里的 T450 拿到了深圳，还升级了几个主要的硬件，多了这一台玩具后，就有了上面的想法，然后实践了一把。</p>
<p>用的工具链是 mingw64，安装包这里有 <a href="http://www.winlibs.com/">http://www.winlibs.com/</a>。</p>
<p>有一些工程本来就考虑 Windows 环境的，用 mingw32-make 替换 make 很多东西都能直接编译过，比如 LuaJIT。</p>
<p>mnet 的部分还好，都是我自己的代码，我是单独搞了一个独立于项目之外的 win 目录，放置一个 shell 文件，编译参数都配置好了，而且加上了 OpenSSL 的支持，来自 <a href="https://slproweb.com/products/Win32OpenSSL.html">https://slproweb.com/products/Win32OpenSSL.html</a>。</p>
<p>这个 OpenSSL 可以选择是 msi 安装包的，安装好后，将头文件以及二进制库放到刚提到的 win 目录下相应位置就好。</p>
<p>跑了一下基于 openssl 的 reconnect 以及 rwdata 点对点测试，没毛病，跑得很好。</p>
<p>mnet 测试 OK 后，想着是不是 cincau 也可以呀，但是 cincau 的依赖项比较多，在 Mac 以及 Linux 下，依赖了 LuaRocks 来管理。但是在 Win 下，我死活用不了这个 LuaRocks，不知道怎么用，不管是 Git Bash、Windows Terminal 还是 cmd.exe，都没法用，也许是我使用的方式不对吧，这个就不晓得了。</p>
<p>不过没关系，用不了 LuaRocks，我就一个一个编译好了，好几个是不需要单独编译的，比如 MoonCake，纯 Lua 的库，但也遇到了问题，没法用 shebang 的方式拉起一个 lua 源代码了，只能删除 shebang 行，用一个单独的 bat 文件模拟了。</p>
<p>另外一个比较难的是 luasql.sqlite3，我搞了好久，大概有 3 个小时左右，在 lua 侧 require 老是出现找不到库的问题，运行起来后，库函数定位不到。</p>
<p>这个时候其实 cincau demo 工程里面，基本的 HTTP 已经通了，但是在 playground 页面里的 sqlite3 数据库读写还是失败的。</p>
<p>这里的原因，是因为 sqlite3.dll 预编译包和 lua.sqlite3 最终生成的 sqlite3.dll 文件名冲突了，导致加载失败。</p>
<p>使用了工具链的 nm 查看，发现 luaopen_luasql_sliqte3 确实没找到，怪不得失败，搞了半个晚上呀，没成功，只能先睡觉去了。</p>
<p>第二天一想，不对呀，我其实可以将 sqlite3.c 和 sqlite3.h 跟 luas.qlite3 放到一起编译的，这样就少了一层 dll 加载，只留了一个 sqilte3.dll 放到 luasql 目录下。这样在 lua 源文件层，之前怎么 require lua.sqlite3，现在还是一样。</p>
<p>此次变更后，demo 工程 playground 页面下的几个测试项都通过了，可喜可贺。</p>
<p>之后将这个 win 目录放到了单独的分支中，毕竟编译麻烦，不像 mnet，后面如果没有 C 层的改动，这个目录其实可以继续用下去了。</p>
<div class="category"><a href="CategoryProgramming.html">CategoryProgramming</a> / <a href="2022-10.html#p0">Permalink</a> / <a href="https://github.com/lalawue/homepage/discussions/categories/blog" target="_blank">Discussion</a></div>
<!-- Page published by cmark-gfm ends here -->
  <div id="foot">2004-<script>var d = new
	Date();document.write(d.getFullYear())</script> &copy;
	Sucha. Powered by MarkdownProjectCompositor.
  </div>
  </div><!-- text -->
  <div id="sidebar">
  </div><!-- sidebar -->
  <script src="../js/prism.min.js" async="async"></script>
  <script src="../js/blog_sidebar.js"></script>
  </div> <!-- body -->
</body>
</html>